import { jwtDecode } from 'jwt-decode'

const TokenKey = 'zcn_token'

/**
 * 获取存储的token
 */
export function getToken() {
  return localStorage.getItem(TokenKey);
}

/**
 * 设置token
 * @param {string} token - JWT token
 */
export function setToken(token) {
  return localStorage.setItem(TokenKey, token);
}

/**
 * 移除token
 */
export function removeToken() {
  return localStorage.removeItem(TokenKey);
}

/**
 * 解析JWT token
 * @param {string} token - JWT token
 * @returns {object|null} 解析后的payload或null
 */
export function parseToken(token) {
  if (!token) return null;
  
  try {
    return jwtDecode(token);
  } catch (e) {
    console.error('Token解析失败:', e);
    return null;
  }
}

/**
 * 从当前token中获取用户信息
 * @returns {object|null} 用户信息或null
 */
export function getUserFromToken() {
  const token = getToken();
  if (!token) return null;
  
  try {
    const decoded = parseToken(token);
    return decoded;
  } catch (e) {
    console.error('获取用户信息失败:', e);
    return null;
  }
}

/**
 * 检查token是否过期
 * @returns {boolean} 是否过期
 */
export function isTokenExpired() {
  const token = getToken();
  if (!token) return true;
  
  try {
    const decoded = parseToken(token);
    // 如果decoded为null或者没有exp字段，则视为未过期
    if (!decoded || !decoded.exp) return false;
    
    // 转换为毫秒并比较
    const currentTime = Date.now() / 1000;
    return decoded.exp < currentTime;
  } catch (e) {
    console.error('检查Token过期失败:', e);
    return true;
  }
}

/**
 * 获取token过期时间
 * @returns {number|null} 过期时间戳或null
 */
export function getTokenExpiration() {
  const token = getToken();
  if (!token) return null;
  
  try {
    const decoded = parseToken(token);
    return decoded && decoded.exp ? decoded.exp * 1000 : null; // 转为毫秒
  } catch (e) {
    console.error('获取过期时间失败:', e);
    return null;
  }
}
